package com.practice.java0620;

public class Testopt {
	/*
	 * 课堂笔记 运算符 1.算术运算符 + - * / % ++ --
	 * 
	 * ++：自增运算。变量是在当前值的基础上进行+1运算 --：自减运算。变量在当前值的基础上进行—1运算
	 * 
	 * 解析： 自增自减的运算中包含两种值 一种是：变量自身的值 另一种是：自增自减表达式的值
	 * 
	 * 
	 * 先自增和后自增的区别：
	 * 
	 * 
	 * 先自增： 后自增：
	 * 
	 * 变量： 初始变量值+1 初始变量值+1 表达式： 初始变量值+1 初始变量值不变
	 * 
	 * 
	 * 总结： 无论是先自增还是后自增 自变量自身的值都是+1 先自增表达式的值是变量的原始值+1 后自增表达式的值是变量的原始值
	 * 
	 * 
	 * 无论是先自减还是后自减 自变量自身的值都是-1 先自减表达式的值是变量的原始值-1 后自减表达式的值是变量的原始值
	 * 
	 * 
	 * 注意：除数不能为0 进行除法得到的整数数据 会舍弃掉小数点后面的数 进行%运算余数作为结果（而不是商） 算数运算中 可以使用（）改变运算的优先级
	 * 运算顺序默认从左往右 先乘除后加减（也就是说，运算符之间也有优先级） 2.赋值运算 将一个常数或者表达式的值给一个变量 给变量进行赋值操作 都是两元运算符
	 * 赋值运算符：=、+=、-=、*=、/=、%=
	 * 
	 * 3.比较运算 比较运算符：>、<、>=、<=、==、!=、instanceof 都是两元运算符
	 * 注意：比较运算的结果是Boolean类型（比较运算的结果只有true或false）
	 * 
	 * 4.逻辑运算符 非！ 一元运算符 与&&、或||是两元运算符 逻辑运算的操作数都是Boolean类型的 逻辑运算的结果还是Boolean类型
	 * 操作数可以变量也可以是表达式 但是要求变量的值和表达式的结果都是Boolean类型的
	 * 
	 * 语法： 非！运算： ！true=false ！false=true 非运算的操作数可以是变量也可以是表达式
	 * 
	 * 与&&运算： t&&t=t t&&f=f f&&t=f f&&f=f 只有两个操作数同时为t是结果才是t，只要有一个操作为f结果就为f
	 * 
	 * 或||运算： t||t=t； t||f=t; f||t=t; f||f=f 只有两个操作数同时为f时结果才是f,只要有一个操作数为t结果就为t
	 * 
	 * 
	 * 逻辑短路：
	 * 
	 * 与短路：
	 * 
	 * 当有多个连续的与运算时，从左往右开始如果出现一个操作数的结果显示为false，则 整个与运算终止，整个表达式结果为false，其后的表达式将不会再被执行
	 * 
	 * 或短路：
	 * 
	 * 当有过个连续的或运算时，从左往右开始如果出现一个操作数的结果为t，则整个或运算终止 整个表达式的结果为t，其后的表达式将不会再被执行
	 * 
	 * 组合短路：根据表达式的运算级别的层次关系，逐层进行判定
	 * 
	 * 5.位运算符 位移运算 ：将计算机中二进制的位数进行移动 <<不带符号的左移 >>不带符号的右移 >>>带符号的右移
	 * 
	 * <<：最高位符号位不动，其他位上的数向左移动n位，右侧空余部分补0，左侧移出去的位做丢弃处理 左移n位表示乘以2的n次幂
	 * >>:最高位符号位不定，其他位上的数向右移动n位，左侧空余部分补符号位（符号位是0就补0，是1就补1.），右侧移出的位做丢弃处理
	 * 右移n位表示除以2的n次幂； >>>：最高符号位也参与移动，左侧空余部分补0；右侧移出的位做丢弃处理（该运算对负数没有意义）
	 * 
	 * 注意： 位运算是在补码的基础上进行的。（计算机中所有的数都是以补码的形式存在的）
	 * 
	 * 运用位运算进行变量值的交换。（多用于整型数据的交换）
	 * 
	 * 
	 * 6.问号表达式？：
	 * 
	 * 问号表达式是高级语言中唯一一个三元运算符（需要三个操作数）
	 * 
	 * 语法： 条件判定表达式？结果表达式1：结果表达式2；
	 * 
	 * 解析：如果条件判定表达式的结果为true 则取结果表达式1作为整个问号表达式的最终结果 反之，取结果表达式2作为整个问号表达式的最终结果
	 * 
	 * 注意：？前面的条件判定表达式的运算结果只能是Boolean类型的值 结果表达式1和结果表达式2还可以继续嵌套问号表达式
	 * 整个问号表达式的结果类型取决于结果表达式1和结果表达式2的类型 一般，结果表达式1和结果表达式2的类型是一样的或者兼容的（可以进行默认转换）
	 * 问号表达式等价于if-else语句：
	 * 
	 * 
	 * 
	 * 
	 * 
	 */

	public static void main(String[] args) {
		// 算数运算符 进行除法 定义3个int型的变量并进行初始化
		int iVal01 = 10;
		int iVal02 = 3;
		int iVal03 = 0;
		// 进行除法运算
		int iVal04 = iVal01 / iVal02;
		System.out.println("除法运算的结果是：" + iVal04);

		// 进行求余运算 取余数而不是商
		int iVal10 = iVal01 % iVal02;
		System.out.println("求余运算的结果为：" + iVal10);

		System.out.println("================================");
		// 定义一个变量iVal20
		int iVal20 = 3;
		System.out.println("先进行自增运算，运算前iVa20的值是：" + iVal20);
		// 进行先自增运算 分别查看表达式的值和变量的值
		System.out.println("表达式++iVal20进行先自增运算后的结果是：" + (++iVal20));
		System.out.println("表达式++iVal20进行先自增运算后，iVal20的值是：" + iVal20);
		// 对标量重新进行赋值
		iVal20 = 3;
		// 进行后自增运算 分别查看表达式的值和变量的值
		System.out.println("表达式iVal20++进行后自增运算后的结果是：" + (iVal20++));
		System.out.println("表达式iVal20++进行后自增运算后，iVal20的值是" + iVal20++);
		System.out.println("================================");
		// 定义一个int型变量
		int iVal30 = 5;
		// 进行运算
		iVal30 += 5;
		System.out.println("进行iVal30+=5运算之后，iVal30的值是：" + iVal30);
		// 定义两个int类型的变量并实例化
		int iAge_1 = 30;
		int iAge_2 = 31;
		// 定义一个布尔类型的变量 进行后面的比较判断操作
		boolean isAge_1 = iAge_1 > iAge_2;
		// 输出判断的值
		System.out.println(isAge_1);
		// 定义一个布尔类型的变量 进行比较判断操作
		boolean isAge_2 = iAge_1 < iAge_2;
		// 输出值
		System.out.println(isAge_2);
		boolean isAge_3 = (iAge_1 == iAge_2);
		System.out.println(isAge_3);

		System.out.println("================================");

		int iVal91 = 10;
		int iVal92 = 11;
		int iVal93 = 12;
		// 逻辑运算（出现逻辑与短路）
		boolean isOk = iVal91++ > iVal92 && --iVal93 == iVal92;// iVal91=11,iVal92=11,iVal93=11
		System.out.println("isOk=" + isOk);// false
		System.out.println(iVal91);
		System.out.println(iVal93); // iVal93没有出现短路 所以才会继续计算iVal93的值
		System.out.println("================================");

		int iVal110 = -128;
		int iCount = 1;
		// iVal11o右移iCount位
		int iVal111 = iVal110 >> iCount;
		System.out.println(iVal110 + "右移" + iCount + "位：" + iVal111);
		int iVal112 = iVal110 << iCount;
		// iVal110左移iCount位
		System.out.println(iVal111 + "左移" + iCount + "位：" + iVal112);
		int iVall113 = iVal110 >>> iCount;
		System.out.println(iVal110 + "右移" + iCount + "位：" + iVall113);

		System.out.println("==================================");

		// 进行交换处理
		int iVal121 = 3;
		int iVal122 = 4;
		iVal121 = iVal121 ^ iVal122;
		iVal122 = iVal122 ^ iVal121;
		iVal121 = iVal121 ^ iVal122;
		System.out.println("iVal121:" + iVal121);
		System.out.println("iVal122:" + iVal122);
		System.out.println("===========================================");

		
		
		//嵌套问号表达式进行判断   
		int iScore = 91;
		String str = iScore < 60 ? "不及格"
				: iScore < 70 ? "及格" 
						: iScore < 80 ? "中等" 
								: iScore < 90 ? "良好" 
										: iScore < 100 ? "优秀" : "你这是要上天？";
		System.out.println(iScore + "分的等级是：" + str);

	}

}
